home *** CD-ROM | disk | FTP | other *** search
-
- procedure White2Space( var Str: string; const WhiteSpace: string ); assembler;
- { replace white space chars in Str by spaces
- the string WhiteSpace contains the chars to replace }
- asm { setup }
- cld { string operations forwards }
- les di, str { ES:DI points to Str }
- xor cx, cx { clear cx }
- mov cl, [di] { length Str in cl }
- jcxz @exit { if length of Str = 0, exit }
- inc di { point to 1st char of Str }
- mov dx, cx { store length of Str }
- mov bx, di { pointer to Str }
- lds si, WhiteSpace { DS:SI points to WhiteSpace }
- mov ah, [si] { load length of WhiteSpace }
-
- @start: cmp ah, 0 { more chars WhiteSpace left? }
- jz @exit { no, exit }
- inc si { point to next char WhiteSpace }
- mov al, [si] { next char to hunt }
- dec ah { ah counting down }
- xor dh, dh { clear dh }
- mov cx, dx { restore length of Str }
- mov di, bx { restore pointer to Str }
- mov dh, ' ' { space char }
- @scan:
- repne scasb { the hunt is on }
- jnz @next { white space found? }
- mov [di-1], dh { yes, replace that one }
- #next: jcxz @start { if no more chars in Str }
- jmp @scan { if more chars in Str }
- @exit:
- end { White2Space };
-
-
- procedure Trim( var Str: string ); assembler;
- { remove trailing and leading spaces from str }
- asm { setup }
- les di, str { ES:DI points to Str }
- lds si, str { DS:SI points to Str }
- xor cx, cx { clear cx }
- mov cl, [di] { length Str in cl }
- jcxz @exit { if length of Str = 0, exit }
- mov bx, di { bx points to length byte of Str }
- xor dx, dx { clear dx }
- mov al, ' ' { hunt for spaces }
-
- { look for trailing spaces }
- std { string operations backwards }
- add di, cx { start with last char in Str }
- repe scasb { the hunt is on }
- jz @done { only spaces? }
- inc cx { no, don't lose last char }
-
- { look for leading spaces }
- cld { string operations forward }
- inc si { pointer to 1st char of Str }
- mov di, si { pointer to 1st char of Str --> di }
- repe scasb { the hunt is on }
- jz @done { if only spaces, we are done }
- inc cx { no, don't lose 1st non-blank char }
- dec di { no, don't lose 1st non-blank char }
- mov dx, cx { new lenght of Str }
- xchg di, si { swap si and di }
- rep movsb { move remaining part of Str }
- @done: mov [bx], dl { new length of Str }
- @exit:
- end { Trim };
-
- procedure RTrim( var Str: string ); assembler;
- { remove trailing spaces from str }
- asm { setup }
- std { string operations backwards }
- les di, str { ES:DI points to Str }
- xor cx, cx { clear cx }
- mov cl, [di] { length Str in cl }
- jcxz @exit { if length of Str = 0, exit }
- mov bx, di { bx points to Str }
- add di, cx { start with last char in Str }
- mov al, ' ' { hunt for spaces }
-
- { remove trailing spaces }
- repe scasb { the hunt is on }
- jz @done { only spaces? }
- inc cx { no, don't lose last char }
- @done: mov [bx], cl { overwrite length byte of Str }
- @exit:
- end { RTrim };
-
-
- procedure LTrim( var Str: string ); assembler;
- { remove leading white space from str }
- asm { setup }
- cld { string operations forward }
- lds si, str { DS:SI points to Str }
- xor cx, cx { clear cx }
- mov cl, [si] { length Str --> cl }
- jcxz @exit { if length Str = 0, exit }
- mov bx, si { save pointer to length byte of Str }
- inc si { 1st char of Str }
- mov di, si { pointer to 1st char of Str --> di }
- mov al, ' ' { hunt for spaces }
- xor dx, dx { clear dx }
-
- { look for leading spaces }
- repe scasb { the hunt is on }
- jz @done { if only spaces, we are done }
- inc cx { no, don't lose 1st non-blank char }
- dec di { no, don't lose 1st non-blank char }
- mov dx, cx { new lenght of Str }
- xchg di, si { swap si and di }
- rep movsb { move remaining part of Str }
- @done: mov [bx], dl { new length of Str }
- @exit:
- end { LTrim };
-